const { ipcRenderer, remote } = require("electron");
const fs = require("fs");

let textareaDom = document.querySelector("#textarea");

document.title = "无标题";
let isSave = true; // 当前文件是否已经保存
let currentFilePath = ""; // 当前文件已保存过的路径（再次保存时不用弹窗选择路径）

// 监听输入，将状态改为未保存
textareaDom.oninput = function () {
  if (isSave) document.title += "*";
  isSave = false;
};

// 监听右击事件，通知主进程展示右键菜单
document.addEventListener("contextmenu", (e) => {
  e.preventDefault();

  ipcRenderer.send("contextmenu");
});

ipcRenderer.on("action", (e, action) => {
  switch (action) {
    case "new": // 新建文件
      askSaveDialog();

      document.title = "无标题";
      editor.setValue("");
      isSave = true;
      currentFilePath = "";
      break;
    case "open": // 打开文件
      askSaveDialog();

      // 获取文件路径
      remote.dialog
        .showOpenDialog({
          properties: ["openFile"],
        })
        .then((res) => {
          if (res.canceled || res.filePaths.length < 1) return;

          document.title = res.filePaths[0];
          // 读取文件内容
          let fileContent = fs.readFileSync(res.filePaths[0]);
          // 写入到页面上
          editor.setValue(fileContent.toString());
          isSave = true;
          currentFilePath = res.filePaths[0];
        });
      break;
    case "save": // 保存文件
      saveCurrentFile();
      break;
    case "exit": // 退出程序
      askSaveDialog();
      ipcRenderer.send("exit-app");
      break;
  }
});

/**
 * @description 文件未保存，弹窗提示保存文件
 */
function askSaveDialog() {
  if (!isSave) {
    let askRes = remote.dialog.showMessageBoxSync({
      type: "question",
      message: "是否要保存此文件？",
      buttons: ["Yes", "No"],
    });
    if (askRes === 0) {
      saveCurrentFile();
    }
  }
}

/**
 * @description 保存文件（未保存过，弹窗选择保存路径；已保存过，直接写入文件不弹窗）
 */
function saveCurrentFile() {
  if (!currentFilePath) {
    // 选择保存路径
    remote.dialog
      .showSaveDialog({
        defaultPath: "test.txt",
        filters: [{ name: "All Files", extensions: ["*"] }],
      })
      .then((res) => {
        if (res.canceled || !res.filePath) return;

        // 将页面的内容写入文件并保存到指定路径
        fs.writeFile(res.filePath, textareaDom.value, (err) => {
          if (err) {
            alert("保存失败");
          } else {
            document.title = currentFilePath;
            isSave = true;
            currentFilePath = res.filePath;
            alert("保存成功");
          }
        });
      });
  } else {
    fs.writeFile(currentFilePath, textareaDom.value, (err) => {
      if (err) {
        alert("保存失败");
      } else {
        document.title = currentFilePath;
        isSave = true;
        alert("保存成功");
      }
    });
  }
}
